#include <gtkmm.h>

class MyWindow : public Gtk::Window {
public:
    MyWindow() {
        // 设置窗口标题
        set_title("GtkImage Example");
        set_default_size(400, 300);

        // 创建一个垂直盒子容器
        Gtk::Box* vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 10));
        add(*vbox);

        // 从文件加载图像
        Gtk::Image* image1 = Gtk::manage(new Gtk::Image("path/to/image1.png"));
        vbox->pack_start(*image1);

        // 从内存中的 GdkPixbuf 加载图像
        Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file("path/to/image2.jpg");
        Gtk::Image* image2 = Gtk::manage(new Gtk::Image(pixbuf));
        vbox->pack_start(*image2);

        // 从资源加载图像（需要提前将图像嵌入到资源文件中）
        Gtk::Image* image3 = Gtk::manage(new Gtk::Image("/com/example/app/resource_image.png"));
        vbox->pack_start(*image3);

        // 从图标名称加载图像
        Gtk::Image* image4 = Gtk::manage(new Gtk::Image("application-exit", Gtk::ICON_SIZE_DIALOG));
        vbox->pack_start(*image4);

        // 显示所有子控件
        show_all_children();
    }

    virtual ~MyWindow() {}
};

int main(int argc, char *argv[]) {
    auto app = Gtk::Application::create(argc, argv, "com.example.GtkImageExample");

    MyWindow window;

    return app->run(window);
}

